<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <script>
    var p = {
      name: '张三',
      age: 10,
      hobby: ['玩游戏', '刷抖音', '打排球', '打台球'],
      show: function () {
        console.log("方法");
      },
      married: true,
      son: { name: '小三', age: 1, hobby: ['吃', '喝酒'] },
      ex: /^1[356789]\d{9}$/
    }

    // var p2 = {}
    // Object.assign(p2, p);// 简单数据类型拷贝值, 复杂数据类型引用地址

    // p2.age = 22;
    // p2.name = "李四"
    // p2.show = function () {
    //   console.log(888);
    // }
    // p2.hobby[1] = '刷快手'
    // p2.son.name = "小米"
    // console.log(p);
    // console.log(p2);

    // 深拷贝
    // 封装函数
    function deepCopy (newobj, oldobj) {
      for (var k in oldobj) {
        // 判断我们的属性值属于那种数据类型
        // 1. 获取属性值  oldobj[k]
        var item = oldobj[k];
        // 2. 判断这个值是否是数组
        if (item instanceof Array) {
          newobj[k] = [];
          deepCopy(newobj[k], item)
        } else if (item instanceof Object) {
          // 3. 判断这个值是否是对象
          newobj[k] = {};
          deepCopy(newobj[k], item)
        } else {
          // 4. 属于简单数据类型
          newobj[k] = item;
        }
      }
    };

    // var p3 = {};
    // deepCopy(p3, p)

    // p3.age = 22;
    // p3.name = "李四"
    // p3.show = function () {
    //   console.log(888);
    // }
    // p3.hobby[1] = '刷快手'
    // p3.son.name = "小米"
    // console.log(p);
    // console.log(p3);


    //JSON进行深拷贝
    var x = JSON.stringify(p);// JS对象 转 JSON对象字符串
    console.log(x);
    var p4 = JSON.parse(x)// JSON对象字符串  转  JS对象

    p4.son.name = '小王'
    console.log(p);
    console.log(p4);



  </script>
</body>

</html>